<template>
	<picker
		@change="bindPickerChange"
		@columnchange="columnchange"
		:range="array"
		range-key="name"
		:value="value"
		mode="multiSelector"
	>
		<slot></slot>
	</picker>
</template>

<script>
import AllAddress from './data.js'
let selectVal = ['', '', '']
export default {
	name: 'pickerAddress',

	data() {
		return {
			value: [0, 0, 0],
			array: [],
			index: 0
		}
	},
	created() {
		this.initSelect()
	},
	methods: {
		// 初始化地址选项
		initSelect() {
			this.updateSourceDate() // 更新源数据
				.updateAddressDate() // 更新结果数据
				.$forceUpdate() // 触发双向绑定
		},
		// 地址控件改变控件
		columnchange(d) {
			this.updateSelectIndex(d.detail.column, d.detail.value) // 更新选择索引
				.updateSourceDate() // 更新源数据
				.updateAddressDate() // 更新结果数据
				.$forceUpdate() // 触发双向绑定
		},
		/**
		 * 更新源数据
		 * */
		updateSourceDate() {
			this.array = []
			this.array[0] = AllAddress.map(obj => {
				return {
					name: obj.name
				}
			})
			this.array[1] = AllAddress[this.value[0]].city.map(obj => {
				return {
					name: obj.name
				}
			})
			this.array[2] = AllAddress[this.value[0]].city[this.value[1]].area.map(obj => {
				return {
					name: obj
				}
			})
			return this
		},

		/**
		 * 更新索引
		 * */
		updateSelectIndex(column, value) {
			let arr = JSON.parse(JSON.stringify(this.value))
			arr[column] = value
			if (column === 0) {
				arr[1] = 0
				arr[2] = 0
			}
			if (column === 1) {
				arr[2] = 0
			}
			this.value = arr
			return this
		},

		/**
		 * 更新结果数据
		 * */
		updateAddressDate() {
			selectVal[0] = this.array[0][this.value[0]].name
			selectVal[1] = this.array[1][this.value[1]].name
			selectVal[2] = this.array[2][this.value[2]].name
			return this
		},

		/**
		 * 点击确定
		 * */
		bindPickerChange(e) {
			this.$emit('change', {
				index: this.value,
				data: selectVal
			})
			return this
		}
	}
}
</script>

<style lang="stylus" scoped>
.status_bar
	width 100%
.nav-main
	position relative
	.nav-main-back
		position absolute
		left 10rpx
	.nav-main-title
		color #fff
		font-size 16px
</style>
